Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
ЛАБОРАТОРНА РОБОТА №3
з дисципліни «Системи баз даних»
Варіант № 9
Тема: Вибірка даних з створених відношень
Мета: Навчитися вибирати дані з однієї та декільох таблиць бази даних за
допомогою оператора SELECT
Завдання:
1) створити запит по 1 таблиці за допомогою оператора SELECT:
- для вибору стовпців таблиці;
- WHERE для вибору рядків таблиці з використанням AND, OR, NOT;
- WHERE з використанням предикатів IN, BETWEEN, LIKE, ISNULL;
2) створити впорядковані списки за допомогою ORDER BY;
3) створити запит по 2 таблицям з використанням INNER JOIN/ LEFT OUTER
JOIN / RIGHT OUTER JOIN - пояснити різницю
4) створити запит з використанням опцій DISTINCT та LIMIT / TOP
Скрипт:
#Створення бази даних
CREATE DATABASE IF NOT EXISTS lab;
USE lab;
#Створення таблиці відділів
create table IF NOT EXISTS department(
ID_department INT auto_increment primary key,
Department varchar(30) not null unique
) engine = INNODB;
#Створення таблиці працівників
CREATE TABLE IF NOT EXISTS person (
ID_person INT AUTO_INCREMENT PRIMARY KEY,
Connector_ID_department INT,
FOREIGN KEY (Connector_ID_department)
REFERENCES department(ID_department),
Table_number INT NOT NULL UNIQUE,
FIO_person VARCHAR(50) NOT NULL,
Salary INT CHECK (salary > 0),
Gained BOOL # Отримав або ні
) ENGINE=INNODB;
create table IF NOT EXISTS money(
ID_money INT auto_increment primary key,
Connector_ID_person INT,
FOREIGN KEY(Connector_ID_person)
REFERENCES person(ID_person),
Code_money INT unique not null,
Amount_money Int not null,
Type_money varchar(50)
) engine = INNODB;
#Заповнення таблиці відділів
INSERT INTO department (Department)
VALUES
('Marketing department'),
('Sales department'),
('Production department');
#Заповнення таблиці працівників
INSERT INTO person (Connector_ID_department, Table_number, FIO_person, Salary, Gained)
VALUES
(1, 0001, 'Medvedev I.O.', 1900, true),
(2, 0002, 'Ivanov V.A.', 2100, false),
(3, 0003, 'Smirnov K.L.', 1800, true),
(1, 0004, 'Petrov G.G.', 1850, true);
#Заповнення таблиці надходжень
INSERT INTO money (Connector_ID_person, Code_money, Amount_money, Type_money)
VALUES
(1, 001, 1900, 'Earnings'),
(2, 002, 200, 'Award'),
(3, 101, 100, 'Penalty for inappropriate behavior'),
(4, 102, 50, 'Late penalty');
/*Завдання - 1*/
SELECT Department FROM department;
SELECT * FROM person where Salary > 1800 and Gained is true;
SELECT * FROM person where Salary < 1950 or Table_number > 0003;
SELECT * FROM person where Gained is not false;
SELECT * FROM money where Type_money in ('Earnings', 'Late penalty');
SELECT * FROM money where Amount_money between 0 and 150;
SELECT * FROM money where Amount_money LIKE '_00';
SELECT * FROM money where Code_money is Null;
/*Завдання - 2*/
SELECT * FROM money ORDER BY Type_money;
SELECT * FROM money ORDER BY Amount_money, Connector_ID_person;
SELECT * FROM money ORDER BY Amount_money DESC, Type_money;
/*Завдання - 3*/
#Щоб продемонтсрувати, як працює right outer/left outer join:
INSERT INTO department (Department)
VALUES ('Travel department');
INSERT INTO person (Connector_ID_department, Table_number, FIO_person, Salary, Gained)
VALUES(null, 0005, 'Kozakov I.O.', 1700, true);
SELECT FIO_person,Salary, Department FROM person inner join department on Connector_ID_department = ID_department;
SELECT FIO_person,Salary, Department FROM person right outer join department on Connector_ID_department = ID_department;
SELECT FIO_person,Salary, Department FROM person left outer join department on Connector_ID_department = ID_department;
/*Завдання - 4*/
SELECT distinct FIO_person FROM person;
SELECT * FROM person LIMIT 3;
SELECT * FROM person LIMIT 3,1;
#Вивід таблиць
SELECT * FROM department;
SELECT * FROM person;
SELECT * FROM money;
#Видалення та...